package com.excellent.common.core.domain.entity;

import com.excellent.common.annotation.Excel;
import com.excellent.common.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonIgnore;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Arrays;
import java.util.Date;
import java.util.List;


/**
 * 用户对象 sys_user
 *
 * @author excellent
 */
public class SysUser extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /**
     * 登录名称
     */
    @Excel(name = "登录名称")
    private String loginName;

    /**
     * 用户名称
     */
    @Excel(name = "姓名")
    private String userName;
    /**
     * 用户ID
     */
//    @Excel(name = "用户序号", cellType = Excel.ColumnType.NUMERIC, prompt = "用户编号")
    private Long userId;

    /**
     * 部门ID
     */
    @Excel(name = "部门编号", readConverterExp = "1=管理员,2=教师,3=学生")
    private Long deptId;

    /**
     * 部门对象
     */
//    @Excels({
//            @Excel(name = "部门名称", targetAttr = "deptName", type = Excel.Type.EXPORT)
//    })
    private SysDept dept;

    /** 部门父ID */
    private Long parentId;


    /** 用户类型 */
    private String userType;

    /** 用户邮箱 */
//    @Excel(name = "用户邮箱")
    private String email;

    /** 手机号码 */
    @Excel(name = "手机号码")
    private String phonenumber;

    /**
     * 用户性别
     */
    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
    private String sex;

    /** 用户头像 */
    private String avatar;

    /** 密码 */
    private String password;

    /** 盐加密 */
    private String salt;

    /** 帐号状态（0正常 1停用） */
//    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
    private String status;

    /**
     * 删除标志（0代表存在 2代表删除）
     */
    private String delFlag;

    /** 最后登录IP */
//    @Excel(name = "最后登录IP", type = Excel.Type.EXPORT)
    private String loginIp;

    /**
     * 最后登录时间
     */
//    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
    private Date loginDate;

    /** 密码最后更新时间 */
    private Date pwdUpdateDate;

//    @Excel(name = "专业班级")
    /**原班级*/
    private String stuClass;

//    @Excel(name = "C语言程序设计")
    /**C语言*/
    private float stuC;

//    @Excel(name = "大学英语")
    /**大学英语*/
    private float stuEnglish;

//    @Excel(name = "高等数学1")
    /**高等数学*/
    private float stuMath;

//    @Excel(name = "大学英语1")
    /**教师特长*/
    private String teaSkill;

//    @Excel(name = "职称")
    /**教师职称*/
    private String teaTitle;


    private List<SysRole> roles;

    /** 角色组 */
    private Long[] roleIds;

    public Long getgroupInterviewId() {
        return groupInterviewId;
    }

    public void setgroupInterviewId(Long groupInterviewId) {
        this.groupInterviewId = groupInterviewId;
    }

    /** 组号 */
    private Long groupInterviewId;

    public Long getgroupMachineId() {
        return groupMachineId;
    }

    public void setgroupMachineId(Long groupMachineId) {
        this.groupMachineId = groupMachineId;
    }

    /** 组号 */
    private Long groupMachineId;

    public SysUser(){

    }

    public SysUser(Long userId)
    {
        this.userId = userId;
    }

    public Long getUserId()
    {
        return userId;
    }

    public void setUserId(Long userId)
    {
        this.userId = userId;
    }

    public boolean isAdmin()
    {
        return isAdmin(this.userId);
    }

    public static boolean isAdmin(Long userId)
    {
        return userId != null && 1L == userId;
    }

    public Long getDeptId()
    {
        return deptId;
    }

    public void setDeptId(Long deptId)
    {
        this.deptId = deptId;
    }

    public Long getParentId()
    {
        return parentId;
    }

    public void setParentId(Long parentId)
    {
        this.parentId = parentId;
    }


    public void setRoleId(Long roleId)
    {
        if(roleIds!=null)
        {
            Long[] a=new Long[roleIds.length+1];
            for(int i=0;i<roleIds.length;i++)
            {
                a[i]=roleIds[i];
            }
            a[roleIds.length]=roleId;
            roleIds=a.clone();
        }else{
            Long[] a=new Long[1];
            a[0]=roleId;
            roleIds=a.clone();
        }



    }

    @NotBlank(message = "登录账号不能为空")
    @Size(min = 0, max = 30, message = "登录账号长度不能超过30个字符")
    public String getLoginName()
    {
        return loginName;
    }

    public void setLoginName(String loginName)
    {
        this.loginName = loginName;
    }

    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
    public String getUserName()
    {
        return userName;
    }

    public void setUserName(String userName)
    {
        this.userName = userName;
    }

    public String getUserType()
    {
        return userType;
    }

    public void setUserType(String userType)
    {
        this.userType = userType;
    }

    @Email(message = "邮箱格式不正确")
    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
    public String getEmail()
    {
        return email;
    }

    public void setEmail(String email)
    {
        this.email = email;
    }

    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
    public String getPhonenumber()
    {
        return phonenumber;
    }

    public void setPhonenumber(String phonenumber)
    {
        this.phonenumber = phonenumber;
    }

    public String getSex()
    {
        return sex;
    }

    public void setSex(String sex)
    {
        this.sex = sex;
    }

    public String getAvatar()
    {
        return avatar;
    }

    public void setAvatar(String avatar)
    {
        this.avatar = avatar;
    }

    @JsonIgnore
    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    public String getSalt()
    {
        return salt;
    }

    public void setSalt(String salt)
    {
        this.salt = salt;
    }

    public String getStatus()
    {
        return status;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public String getDelFlag()
    {
        return delFlag;
    }

    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }

    public String getLoginIp()
    {
        return loginIp;
    }

    public void setLoginIp(String loginIp)
    {
        this.loginIp = loginIp;
    }

    public Date getLoginDate()
    {
        return loginDate;
    }

    public void setLoginDate(Date loginDate)
    {
        this.loginDate = loginDate;
    }

    public Date getPwdUpdateDate()
    {
        return pwdUpdateDate;
    }

    public void setPwdUpdateDate(Date pwdUpdateDate)
    {
        this.pwdUpdateDate = pwdUpdateDate;
    }

    public String getStuClass() {
        return stuClass;
    }

    public void setStuClass(String stuClass) {
        this.stuClass = stuClass;
    }

    public float getStuC() {
        return stuC;
    }

    public void setStuC(float stuC) {
        this.stuC = stuC;
    }

    public float getStuEnglish() {
        return stuEnglish;
    }

    public void setStuEnglish(float stuEnglish) {
        this.stuEnglish = stuEnglish;
    }

    public float getStuMath() {
        return stuMath;
    }

    public void setStuMath(float stuMath) {
        this.stuMath = stuMath;
    }

    public String getTeaSkill() {
        return teaSkill;
    }

    public void setTeaSkill(String teaSkill) {
        this.teaSkill = teaSkill;
    }

    public String getTeaTitle() {
        return teaTitle;
    }

    public void setTeaTitle(String teaTitle) {
        this.teaTitle = teaTitle;
    }

    public SysDept getDept(){
        if (dept == null)
        {
            dept = new SysDept();
        }
        return dept;
    }

    public void setDept(SysDept dept)
    {
        this.dept = dept;
    }

    public List<SysRole> getRoles()
    {
        return roles;
    }

    public void setRoles(List<SysRole> roles)
    {
        this.roles = roles;
    }

    public Long[] getRoleIds()
    {
        return roleIds;
    }

    public void setRoleIds(Long[] roleIds)
    {
        this.roleIds = roleIds;
    }


    @Override
    public String toString() {
        return "SysUser{" +
                "userId=" + userId +
                ", deptId=" + deptId +
                ", dept=" + dept +
                ", parentId=" + parentId +
                ", loginName='" + loginName + '\'' +
                ", userName='" + userName + '\'' +
                ", userType='" + userType + '\'' +
                ", email='" + email + '\'' +
                ", phonenumber='" + phonenumber + '\'' +
                ", sex='" + sex + '\'' +
                ", avatar='" + avatar + '\'' +
                ", password='" + password + '\'' +
                ", salt='" + salt + '\'' +
                ", status='" + status + '\'' +
                ", delFlag='" + delFlag + '\'' +
                ", loginIp='" + loginIp + '\'' +
                ", loginDate=" + loginDate +
                ", pwdUpdateDate=" + pwdUpdateDate +
                ", stuClass='" + stuClass + '\'' +
                ", stuC=" + stuC +
                ", stuEnglish=" + stuEnglish +
                ", stuMath=" + stuMath +
                ", teaSkill='" + teaSkill + '\'' +
                ", teaTitle='" + teaTitle + '\'' +
                ", roles=" + roles +
                ", roleIds=" + Arrays.toString(roleIds) +
                ", groupInterviewId=" + groupInterviewId +
                ", groupMachineId=" + groupMachineId +
                '}';
    }
}
